home *** CD-ROM | disk | FTP | other *** search
/ EnigmA Amiga Run 1995 October / EnigmA AMIGA RUN 01 (1995)(G.R. Edizioni)(IT)[!][issue 1995-10][Aminet 7].iso / Aminet / util / cdity / cx22.lha / CX2.2 / Quelltext / CXFileIO.mod < prev    next >
Text File  |  1995-04-26  |  5KB  |  194 lines

  1. IMPLEMENTATION MODULE CXFileIO;
  2.  
  3. IMPORT
  4.     dd:DosD, dl:DosL, ds:DosSupport,
  5.     ed:ExecD, el:ExecL, es:ExecSupport,
  6.     String,
  7.     cxw:CXWindow;
  8.  
  9. FROM SYSTEM IMPORT
  10.     ADDRESS, CAST, ADR;
  11.  
  12.  
  13.  
  14. TYPE
  15.     ListItem = ARRAY [0..39] OF CHAR;
  16.     StrPtr = POINTER TO ARRAY [0..127] OF CHAR;
  17.  
  18.  
  19.  
  20. VAR
  21.     removeList: ed.ListPtr;
  22.     removeItems: POINTER TO ARRAY [0..99] OF ListItem;
  23.     itemCount: INTEGER;
  24.  
  25. (* --------------------------------------------------------------- *)
  26.  
  27. PROCEDURE AddToRemoveList (VAR n: INTEGER; string: ARRAY OF CHAR);
  28. (* Fügt den neuen Broker zur "nur * entfernen"-Liste dazu. *)
  29. VAR
  30.     newnode: ed.NodePtr;
  31. BEGIN
  32.     newnode := el.AllocMem(SIZE(ed.Node), ed.MemReqSet{ed.memClear});
  33.     IF newnode # NIL THEN
  34.         String.Copy (removeItems^[n], string);
  35.         newnode^.name := ADR(removeItems^[n]);
  36.         el.AddTail (removeList, newnode);
  37.         INC (n);
  38.     END;
  39. END AddToRemoveList;
  40.  
  41. (* --------------------------------------------------------------- *)
  42.  
  43. PROCEDURE LoadRemoveList (filename: ADDRESS);
  44. (* "nur * entfernen"-Liste laden *)
  45. VAR
  46.     hdl: dd.FileHandlePtr;
  47.     li: LONGINT;
  48.     newstring: ARRAY [0..127] OF CHAR;
  49.     n, nc: INTEGER;
  50.     c: CHAR;
  51. BEGIN
  52.     IF removeList # NIL THEN
  53.         hdl := ds.Open(filename, dd.readOnly);
  54.  
  55.         IF hdl # NIL THEN
  56.             (* LineFeeds zählen: *)
  57.             itemCount := 0;
  58.             REPEAT
  59.                 li := dl.Read(hdl, ADR(c), 1);
  60.                 IF c = CHR(10) THEN
  61.                     INC (itemCount);
  62.                 END;
  63.             UNTIL li <= 0;
  64.             li := dl.Seek(hdl, 0, dd.beginning);
  65.  
  66.             (* Speicher für Strings reservieren: *)
  67.             removeItems := el.AllocMem(SIZE(ListItem)*itemCount, ed.MemReqSet{ed.memClear});
  68.             IF removeItems # NIL THEN
  69.                 n := 0;
  70.                 REPEAT
  71.                     newstring := "";
  72.                     nc := 0;
  73.                     LOOP
  74.                         li := dl.Read(hdl, ADR(c), 1);
  75.                         IF (li <= 0) OR (c = "\n") THEN EXIT; END;
  76.                         newstring[nc] := c;
  77.                         INC (nc);
  78.                     END;
  79.                     newstring[nc] := 0C;
  80.                     AddToRemoveList (n, newstring);
  81.                 UNTIL (li = -1) OR (li = 0);
  82.             END;
  83.             ds.Close (hdl);
  84.         END;
  85.     END;
  86. END LoadRemoveList;
  87.  
  88. (* --------------------------------------------------------------- *)
  89.  
  90. PROCEDURE IsInRemoveList (name: ADDRESS) : BOOLEAN;
  91. (* Überprüft, ob der übergebene Broker(name) in der "nur * entfernen"-
  92.  * Liste vorhanden ist und gibt dann TRUE zurück, FALSE, wenn nicht.
  93.  *)
  94. BEGIN
  95.     IF removeList # NIL THEN
  96.         RETURN el.FindName(removeList, name) # NIL;
  97.     END;
  98. END IsInRemoveList;
  99.  
  100. (* --------------------------------------------------------------- *)
  101.  
  102. PROCEDURE FreeRemoveList;
  103. (* Belegte Resourcen wieder freigeben. *)
  104. VAR
  105.     node, nnode: ed.NodePtr;
  106. BEGIN
  107.     IF removeList # NIL THEN
  108.         IF removeItems # NIL THEN
  109.             node := removeList^.head;
  110.             WHILE node^.succ # NIL DO
  111.                 nnode := node^.succ;
  112.                 el.FreeMem (node, SIZE(ed.Node));
  113.                 node := nnode;
  114.             END;
  115.  
  116.             el.FreeMem(removeItems, itemCount*SIZE(ListItem));
  117.             removeItems := NIL;
  118.         END;
  119.         el.FreeMem (removeList, SIZE(ed.List));
  120.         removeList := NIL;
  121.     END;
  122. END FreeRemoveList;
  123.  
  124. (* --------------------------------------------------------------- *)
  125.  
  126. CONST
  127.     OPTIONSCOUNT = 4;
  128.  
  129. PROCEDURE LoadOptions (VAR options: cxw.Options);
  130. VAR
  131.     hdl: dd.FileHandlePtr;
  132.     li: LONGINT;
  133.     opt: ARRAY [0..OPTIONSCOUNT-1] OF CHAR;
  134. BEGIN
  135.     hdl := ds.Open(ADR("S:CX.prefs"), dd.readOnly);
  136.     IF hdl # NIL THEN
  137.         li := dl.Read(hdl, ADR(opt), OPTIONSCOUNT);
  138.         ds.Close (hdl);
  139.         WITH options DO
  140.             AUTOSIZE := opt[0] = "1";
  141.             REQUESTER := opt[1] = "1";
  142.             REMOVEONLY := opt[2] = "1";
  143.             SIZEABLE := opt[3] = "1";
  144.         END;
  145.     END;
  146. END LoadOptions;
  147.  
  148. PROCEDURE SaveOptions (VAR options: cxw.Options);
  149. VAR
  150.     hdl: dd.FileHandlePtr;
  151.     li: LONGINT;
  152.     opt: ARRAY [0..OPTIONSCOUNT-1] OF CHAR;
  153. BEGIN
  154.     WITH options DO
  155.         IF AUTOSIZE THEN
  156.             opt[0] := "1";
  157.         ELSE
  158.             opt[0] := "0";
  159.         END;
  160.         IF REQUESTER THEN
  161.             opt[1] := "1";
  162.         ELSE
  163.             opt[1] := "0";
  164.         END;
  165.         IF REMOVEONLY THEN
  166.             opt[2] := "1";
  167.         ELSE
  168.             opt[2] := "0";
  169.         END;
  170.         IF SIZEABLE THEN
  171.             opt[3] := "1";
  172.         ELSE
  173.             opt[3] := "0";
  174.         END;
  175.     END;
  176.     hdl := ds.Open(ADR("S:CX.prefs"), dd.newFile);
  177.     IF hdl # NIL THEN
  178.         li := dl.Write(hdl, ADR(opt), OPTIONSCOUNT);
  179.         ds.Close (hdl);
  180.     END;
  181. END SaveOptions;
  182.  
  183. (* --------------------------------------------------------------- *)
  184.  
  185. BEGIN
  186.     removeList := el.AllocMem(SIZE(ed.List), ed.MemReqSet{ed.memClear});
  187.     IF removeList # NIL THEN
  188.         es.NewList (removeList);
  189.     END;
  190.  
  191. CLOSE
  192.     FreeRemoveList;
  193. END CXFileIO.
  194.